<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="./node_modules/vue/dist/vue.js"></script>

</head>
<body>
    <div id="root">
        <!-- 子传父情况下,子去emit('名字',数据),父用@名字来接收="父调用函数名" -->
        <counter ref="counterOne" :count="0" @num-change="comming"></counter>
        <counter ref="counterTwo" :count="0" @num-change="comming"></counter>
        <div>{{total}}</div>
    </div>

    <script>

        var counter={
            props:['count'],
            template:"<div @click='handleClick'>{{number}}</div>",
            // 父组件可以向子组件传递参数
            // 但是子组件绝对不能反过来修改父组件传递过来的参数
            // 原因在于一旦接受的是个引用数据的时候(obj,arr),它可能还被别的子组件所引用
            // 所以子不能改父
            // 所以父给子,子变成副本,副本改变
            data(){
                return {
                    number:this.count
                }
            
            },
            methods:{
                handleClick(){
                    this.number=this.number+2
                    this.$emit('num-change', this.number)
                }
            }
        }

        var vm = new Vue({
            el:"#root",
            components:{
                counter:counter
            },
            data:{
                total:0
            },
            methods:{
                comming(step){
                    // step 就是在emit的时候传进来的参数,可以及时获取
                    this.total = this.$refs.counterOne.number+this.$refs.counterTwo.number
                }
            }
           
        })
    </script>

</body>
</html>